/**
 *@file
 *header file contenente la struttura dati comune
 */

//#define DEBUG_MODE

#ifdef DEBUG_MODE
extern unsigned int MASK; /*<Maschera per la selezione del livello di tracing*/

#define DBG(A, B) {if ((A) & MASK) {B; } }
#else
#define DBG(A, B)
#endif

#define D1(a) DBG(1, a)
#define D2(a) DBG(2, a)

#ifndef DEBUG_MODE
#define NDEBUG
#endif
#include <cassert>


	
	#define t_zero 0.50/**<velocita con cui viene inizializzato il timer ad inizio partita*/
	#define MAX_NOME 15 /**<lunghezza massima del nome giocatore*/
	#define dim_mappa 20 /**<dimensione del quadrato di gioco*/
	#define zero_map 50 /**<indica lo zero mappa,cioè di quanto spostarmi dalla cornice esterna*/
	#define pi	3.14 /**< pi greco*/
	#define dim_object 25 /**<dimensione (in pixel) degli oggetti all'interno del gioco;*/
	#define max_sn 400	/**<dimensione dell'array che rappresenta snake e quindi lunghezza massima raggiungibile*/

   /**
	* Struttura dati per la gestione dei caratteri e le parole da stampare all'interno del menu:
	*/
	struct testo {ALLEGRO_FONT *carattere;/**<carattere:puntatore ad oggetto di tipo carattere*/
				  int px;/**<coordinata x in cui verrà rappresentata la parola*/
				  int py;/**<coordinata y in cui verra rappresentata la parola*/
				  const char *text;/**<puntatore alla stringa da rappresentare*/};

	/**enumerato usato per permettermi la selezione nello switch*/
	enum scelta {menu,gioco,record,prendi_punti,uscita};
	
	/**
	 *Rappresenta la direzione della testa (snake[0]), mi servirà per poter
	 *incrementare o decrementare la posizione della testa sull'asse x piuttosto
     *che sull'asse y, e rappresentarlo nella giusta direzione nel disegno
	 */	
	enum direzione {destra,sotto,sinistra,sopra};
	
	/**
	 *struttura dati utilizzata per memorizzare le coordinate
	 *di tutti gli oggetti presenti in partita
	 */
	struct caratteristiche {int pos_x;/**<posizione in ascissa*/
							int pos_y;/**<posizione in ordinata*/};

	/**
	 * Struttura utilizzata per implementare l'array contenente punteggio e nome del giocatore.
 	 */
	struct elem {int score;/**<punteggio effettuato*/
				 char nome[MAX_NOME];/**<nome giocatore*/};
	
	/**
	 * Struttura contenente l'indirizzo e la lunghezza dell'arry dei record.
 	 */
	struct l_record {elem * elementi;/**<puntatore ad elem int*/
					 int num_elem;/**<numero elementi*/};

	

	


